iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
自我挑戰組

打掉重練!Django的還債之旅~系列 第 16

Day16. migrate 接著走遇到演算法~

  • 分享至 

  • xImage
  •  

前言

昨天我們看到了django中的migrations是用graph的方式去存取,在造graph的時候也跑了一些function去驗證graph的一些特性,那~今天我們就繼續往下看看migrate接下來的過程吧!

正題

https://ithelp.ithome.com.tw/upload/images/20231001/20162905OlrkWIaXjv.png
executor init後會跑一個去驗證graph和migration的一致性
接下來會去檢查衝突
https://ithelp.ithome.com.tw/upload/images/20231001/20162905FQa3IYUDmJ.png
他會去檢查graph中的葉節點是否有重複
https://ithelp.ithome.com.tw/upload/images/20231001/20162905lsZ8vAI14b.png
有的話就會報錯~
接著往下會去看python manage.py migrate的時候有沒有其他的參數,那我這邊都沒給參數所以會是這個
https://ithelp.ithome.com.tw/upload/images/20231001/20162905SsjguOHDlf.png
會把所有葉節點指向targets
接著中間有一段也是檢查有無而外參數,我們跳過到
這邊
https://ithelp.ithome.com.tw/upload/images/20231001/201629052wZJBK8ccI.png
生出一個migration plan
https://ithelp.ithome.com.tw/upload/images/20231001/20162905lZEtSLn5yh.png
https://ithelp.ithome.com.tw/upload/images/20231001/20162905orr0Q1ZV1h.png
其中大部分都會流向
https://ithelp.ithome.com.tw/upload/images/20231001/20162905RSlLCMQxFz.png
而當中的forwards_plan呢又做了什麼事
https://ithelp.ithome.com.tw/upload/images/20231001/201629051zZHcUTZl7.png
會去把該target相關依賴依據DFS深度優先搜尋找出來
https://ithelp.ithome.com.tw/upload/images/20231001/20162905HHANV8Y8Qb.png
把相關不存在applied的migration都加到plan中
接著往下
https://ithelp.ithome.com.tw/upload/images/20231001/20162905ZS7gdFPIYG.png
這邊我們先跳過,因為我還沒搞清楚XD,他有pre和post都會丟signal給db,明天好好研究!
_create_project_state先來看看
https://ithelp.ithome.com.tw/upload/images/20231001/2016290513LLxj0BLr.png
這邊先記錄一下,不太清楚migration.mutate_state()這一段在做什麼!?
再往下
https://ithelp.ithome.com.tw/upload/images/20231001/20162905XmHPlFSnb7.png
其中MigrationAutodetector會去比較兩邊的ProjectState
https://ithelp.ithome.com.tw/upload/images/20231001/20162905NmwPLVK9Fc.png
看看兩邊有無改變,如果有會說明要如何解決~
https://ithelp.ithome.com.tw/upload/images/20231001/20162905gg5ngixhx3.png
最後會才會進入migrate,不過今天就先到這邊吧!剩下的我們明天繼續!

結語

今天這樣看著看著當中有些地方看一兩遍其實還是沒有很清楚,需要再花一點時間去了解整體架構和一些python的lib用法!
尚未了解事項:

  • signal
  • migration.mutate_state

之後再找時間補起來!


上一篇
Day15. django中的graph!
下一篇
Day17. migrate發送了信號signal!?
系列文
打掉重練!Django的還債之旅~30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言